package servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import be.ipl.finito.domaine.Case;
import be.ipl.finito.domaine.Grille;
import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.usecases.GestionJoueur;
import be.ipl.finito.usecases.GestionPartie;

@SuppressWarnings("serial")
@WebServlet(name = "servlet_partie_terminee.html")
public class PartieTerminee extends HttpServlet {
	
	@EJB GestionPartie gestionPartie;
	@EJB GestionJoueur gestionJoueur;
	
	protected synchronized void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Récupérer et tester les paramètres
		Joueur joueur = (Joueur) request.getSession().getAttribute("joueur");
		if (joueur == null) {
			RequestDispatcher rd = getServletContext().getNamedDispatcher("index.html");
			rd.forward(request, response);
			return;
		}
		if (request.getSession().getAttribute("partie") == null) {
			RequestDispatcher rd = getServletContext().getNamedDispatcher("servlet_dashboard.html");
			rd.forward(request, response);
			return;
		}
		Partie partie = (Partie) gestionPartie.getPartie((int)request.getSession().getAttribute("partie"));
		
		// Paramètres pour la page jsp
		List<Grille> classement = gestionPartie.getGrillesTrieesPartieFini(partie.getIdPartie());
		List<Integer> score = new ArrayList<Integer>();
		Collections.sort(classement, new Comparator<Grille>() {
			@Override
			public int compare(Grille g1, Grille g2) {
				return g2.calculerScore()-g1.calculerScore();
			}
		});
		for (Grille grille : classement) {
			score.add(grille.calculerScore());
		}
		request.getSession().setAttribute("classement", classement);
		request.getSession().setAttribute("score", score);
		request.getSession().setAttribute("mapping", Case.MAPPING_NUMCASE_VALEUR);
		RequestDispatcher rd = getServletContext().getNamedDispatcher("partieTerminee.html");
		rd.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
